
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Insifo.BE.Gen;
using Insifo.DL.Gen;
using Insifo.DL;
using Insifo.BE;

namespace  Insifo.BL.Gen
{
        

    public class BLTipoDocumento
    {
            DLTransactionMng _transaccion = null;

            DLTipoDocumento _dl = new DLTipoDocumento();
            DLTipoDocumentoAplicacion _dlApl = new DLTipoDocumentoAplicacion();
            
            /// <summary>
            /// Método obtiene la lista
            /// </summary>
            /// <returns>Devuelve un DataSet</returns>
            public DataSet Listar(BETipoDocumento  pbe)
            {
                return _dl.Listar(pbe);
            }

            /// <summary>
            /// Lista las Aplicaciones por Tipo
            /// </summary>
            /// <returns>Devuelve un Objeto</returns>
            public DataSet ListarAplicacion(BETipoDocumento pbe)
            {
                return _dlApl.Listar(pbe);
            }

            public DataSet ListarPorAplicacion(BETipoDocumentoAplicacion pbe)
            {
                return _dl.ListarPorAplicacion(pbe);
            }
            
            /// <summary>
            /// Método que obtiene un objeto
            /// </summary>
            /// <returns>Devuelve un Objeto</returns>
            public BETipoDocumento Obtener(BETipoDocumento pbe)
            {
                //Obtiene el detalle de salida
                return _dl.Obtener(pbe);
            }

            /// <summary>
            /// Método que inserta un objeto
            /// </summary>
            /// <returns>Devuelve un Objeto</returns>
            public BETipoDocumento Insertar(BETipoDocumento pbe)
            {
                BETipoDocumento be = null;
                _transaccion = DLTransactionMng.Begin();
                try
                {
                    _dl.Transaction = _transaccion;
                    _dlApl.Transaction = _transaccion;
                    be = _dl.Insertar(pbe);
                    foreach (BETipoDocumentoAplicacion beAplicacion in pbe.Aplicaciones)
                    {
                        beAplicacion.IdTipoDocumento = be.IdTipoDocumento;
                        _dlApl.Insertar(beAplicacion);
                    }
                    _transaccion.Commit();
                }
                catch (Exception e)
                {
                    //Cancela la transaccion
                    _transaccion.RollBack();
                    throw e;
                }
                finally
                {
                    _transaccion.Dispose();
                }
                return be;
            }
            /// <summary>
            /// Método que actualiza un objeto
            /// </summary>
            /// <returns>Devuelve un Objeto</returns>
            public BETipoDocumento Actualizar(BETipoDocumento pbe)
            {
                BETipoDocumento be = null;
                _transaccion = DLTransactionMng.Begin();
                try
                {
                    _dl.Transaction = _transaccion;
                    _dlApl.Transaction = _transaccion;
                    be = _dl.Actualizar(pbe);

                    foreach (BETipoDocumentoAplicacion beAplicacion in pbe.Aplicaciones)
                    {
                        beAplicacion.IdTipoDocumento = pbe.IdTipoDocumento;
                        _dlApl.Insertar(beAplicacion);
                    }
                    _transaccion.Commit();
                }
                catch (Exception e)
                {
                    //Cancela la transaccion
                    _transaccion.RollBack();
                    throw e;
                }
                finally
                {
                    _transaccion.Dispose();
                }
                return be;
            }
            /// <summary>
            /// Método que elimina logicamente un objeto
            /// </summary>
            /// <returns>Devuelve un Objeto</returns>
            public BETipoDocumento Eliminar(BETipoDocumento pbe)
            {
                 return _dl.Eliminar(pbe);
            }
          
     }


}